package com.multi.tool.protostuff;

import io.protostuff.LinkedBuffer;
import io.protostuff.ProtobufIOUtil;
import io.protostuff.Schema;
import io.protostuff.runtime.RuntimeSchema;
import lombok.Data;

import java.io.UnsupportedEncodingException;

/**
 * String value = "wzp-test-file";
 * <p>
 * ProtobufIOUtil.toByteArray 长度：32
 * Arrays.toString 长度：13
 * <p>
 * ----------------------------------
 * DivideTest divideTest = new DivideTest();
 * String value = JSON.toJSONString(divideTest);
 * test1(divideTest);
 * test2(value);
 * <p>
 * ProtobufIOUtil.toByteArray 长度：23
 * Arrays.toString 长度：71
 *
 * ===============================
 * 总结：
 * json转换减少2/3
 * string转换增加2/3
 */
public class ProtolStuffTest {

    public static void main(String[] args) {
        String value = "1.保险费：\\n 40元/份\\n2.保额：\\n保额：航空意外420万元；本保单特定传染病危重症疾病保险金额500元，特定传染病身故保险金额1万元，特定传染病疾病保险责任、特定传染病危重症疾病保险责任和特定传染病身故保险责任累计赔付1万；家庭财产综合险—房屋主体保额60万；\\n3.保险有效期：产品航空意外伤害身故/伤残保险责任仅承保客户在保单对应订单中载明的单次航班乘坐期间的保险责任；\\n4.退保相关：\\n本产品投保成功后，计划出发时间前退票需同时退保，计划出发时间及之后不可退保；\\n5.条款名称及备案号：\\n《泰康在线财产保险股份有限公司航空出行意外伤害保险（互联网专属）》\\n注册号：C00019932312021120717543\\n《泰康在线财产保险股份有限公司附加特定传染病保险（互联网专属）》\\n注册号：C00019932622021120717573\\n《泰康在线财产保险股份有限公司家庭财产综合险条款》\\n注册号：C00019932112020051200922\\n6.发票：\\n电子发票送达方式：本产品提供电子发票，其法律效力、基本用途、基本使用规定等与税务机关监制的增值税普通发票相同，如您需要发票，请在保单生效后致电客服电话：95522-3，您需提供寄送地址以便我司向您寄送，相应的快递费用将由您承担。\\n7.承保公司：\\n泰康在线财产保险股份有限公司\\n8.保险公司销售范围：\\n保险公司销售范围：在本公司为互联网保险公司，无线下分支机构，各项保险服务流程均可线上操作。本公司所提供附加服务实际覆盖地区及适用情形以产品保险单载明范围为准。\\n9、本产品仅保障保单载明的航班，若被保险人实际乘坐的航班与保单约定的不符，保险人不承担责任；\\n10、在出发前客户已知出行地和目的地是中高风险地区，保险人不承担特定传染病相关责任。\\n11.保险条款及投保须知\\n《泰康在线财产保险股份有限公司航空出行意外伤害保险（互联网专属）》C00019932312021120717543\\n《泰康在线财产保险股份有限公司附加特定传染病保险（互联网专属）》注册号：C00019932622021120717573\\n《泰康在线财产保险股份有限公司家庭财产综合险》注册号：C00019932112020051200922\\nhttps://m.tk.cn/tkcms/publish/article/detail/704/914925_1.html\\n《投保须知》\\nhttps://m.tk.cn/tkcms/publish/article/detail/704/914929_1.html\\n12.客服热线：\\n 95522-3";

//        DivideTest divideTest = new DivideTest();
//        String value = JSON.toJSONString(divideTest);
        test1(value);
        test2(value);
    }


    public static void test1(Object value) {
        byte[] valueByte;
        Schema schema = RuntimeSchema.getSchema(value.getClass());
        LinkedBuffer buffer = LinkedBuffer.allocate(4096);
        try {
            valueByte = ProtobufIOUtil.toByteArray(value, schema, buffer);
        } finally {
            buffer.clear();
        }

        System.out.println("ProtobufIOUtil.toByteArray 长度：" + valueByte.length);
    }

    public static void test2(String value) {
        try {
            byte[] ba = value.getBytes("UTF-8");
            System.out.println("value.getBytes 长度：" + ba.length);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }

    }
}

@Data
class DivideTest {
    String name = "divide";
    String age = "a";
    String age1 = "b";
    String age2 = "c";
    String age3 = "d";
    String age4 = "e";
}